package 序列化与反序列化;

import java.io.*;

/**
 * 本类用于序列化与反序列化的测试类
 * 序列化:是指把程序中的java对象,永久保存在磁盘中,相当于是写出的过程,方向是out-->ObjectOutputStream
 * 反序列化:是指把已经序列化在文件中保存的数据,读取/恢复到java程序中的过程,方向是in-->ObjectInputStream
 */
public class Test2 {
    public static void main(String[] args)  {
        //method2();//序列化,就是把1.txt里的数据变成电脑才能看懂文字
        //method();//反序列化,和序列化相反是吧1.txt的电脑才能看懂的文字变成人可以看懂的文字子控制台输出
    }
  //反序列化方法
    private static void method() {
        //声明在本方法内保部都生效的局部变量,局部变量需要初始化,默认值是null
        ObjectInputStream in=null;
        //1.创建ObjectOutputStream流对象来完成反序列化
        try {
         in=new ObjectInputStream(new FileInputStream("F:\\a\\1.txt"));
           //2.通过流对象反序列化生成指定对象
            Object o=in.readObject();
            System.out.println(o);
            System.out.println("恭喜您!反序列化成功");
        }catch (Exception e){
            System.out.println("很抱歉!反序列化失败");
            e.printStackTrace();
        }finally {//一定会执行的代码块释放资源的代码
            try{
                //释放资源
                in.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }


    }

    //序列化
    private static void method2()  {
     //声明在本方法内都生效的局部变量,局部变量需要初始化,默认值是null
        ObjectOutputStream out=null;
        try{
            //1.创建ObjectOutputStream流对象来完场序列化
            out=new ObjectOutputStream(new FileOutputStream("F:\\a\\1.txt"));//需要处理异常方法是try-catch
             //2.指定要序列化(输出)的对象
           Test obj=new Test("海绵宝脑",3,"大海底部",'男');
            //3.通过oos流对象来序列化输出Test对象
            out.writeObject(obj);
            System.out.println("恭喜你!序列化成功");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("很抛弃!序列化失败!");
        }//进行关闭流操作
        finally {
            try {
                out.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }


    }
}
